/* Copyright (c) 1996-2017, OPC Foundation. All rights reserved.

   The source code in this file is covered under a dual-license scenario:
     - RCL: for OPC Foundation members in good-standing
     - GPL V2: everybody else

   RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/

   GNU General Public License as published by the Free Software Foundation;
   version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2

   This source code is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/

OpcUa_StatusCode    OPCUA_DLLCALL OpcUa_P_Semaphore_Create( OpcUa_Semaphore*    phRawSemaphore,
                                                            OpcUa_UInt32        uInitalValue,
                                                            OpcUa_UInt32        uMaxRange);

OpcUa_Void          OPCUA_DLLCALL OpcUa_P_Semaphore_Delete( OpcUa_Semaphore*    phRawSemaphore);

OpcUa_StatusCode    OPCUA_DLLCALL OpcUa_P_Semaphore_Wait(   OpcUa_Semaphore     hRawSemaphore);

OpcUa_StatusCode    OPCUA_DLLCALL OpcUa_P_Semaphore_TimedWait(OpcUa_Semaphore   hRawSemaphore,
                                                            OpcUa_UInt32        msecTimeout);

OpcUa_StatusCode    OPCUA_DLLCALL OpcUa_P_Semaphore_Post(   OpcUa_Semaphore     hRawSemaphore,
                                                            OpcUa_UInt32        uReleaseCount);

